#ifndef __myfunc__
#define __myfunc__

// ---------------------------------------------------------------------------
void Set0Seg0124(uint8_t segnum, bool up) {
  if (segnum == SEG_0_0) {
    pwm0.setPWM(SEG_0_0, 0, up ? SERVO_180_A + 100 - OFFSET_UP_0_0 : SERVO_0_A);
  } else if (segnum == SEG_0_1) {
    pwm0.setPWM(SEG_0_1, 0, up ? SERVO_180_A + 100 - OFFSET_UP_0_1 : SERVO_0_A);
  } else if (segnum == SEG_0_2) {
    pwm0.setPWM(SEG_0_2, 0, up ? SERVO_180_R + 100 - OFFSET_UP_0_2 : SERVO_0_R);
  } else if (segnum == SEG_0_4) {
    pwm0.setPWM(SEG_0_4, 0, up ? SERVO_180_R + 100 - OFFSET_UP_0_4 : SERVO_0_R);
  }
  delay(DELAY_SEC);
}

void Set0Seg356(bool seg3, bool seg5, bool seg6) {
  if (seg06up != seg6) {
    // 只要6要动作，3和5都应该让一下
    pwm0.setPWM(SEG_0_3, 0, seg03up ? SERVO_135_R : SERVO_45_R);
    pwm0.setPWM(SEG_0_5, 0, seg05up ? SERVO_135_A : SERVO_45_A);
    delay(DELAY_SEC);
    seg06up = seg6;
  }
  // 6动作，或调试的时候，实时动一下
  pwm0.setPWM(SEG_0_6, 0, seg06up ? SERVO_180_A + 100 - OFFSET_UP_0_6 : SERVO_0_A);
  pwm0.setPWM(SEG_0_R, 0, seg06up ? SERVO_180_R + 100 - OFFSET_UP_0_6 : SERVO_0_R);
  // 可能6还没有动作完成，延时长一点
  delay(5 * DELAY_SEC);
  // 3和5恢复，或继续动作
  seg03up = seg3;
  seg05up = seg5;
  pwm0.setPWM(SEG_0_3, 0, seg03up ? SERVO_180_R + 100 - OFFSET_UP_0_3 : SERVO_0_R);
  pwm0.setPWM(SEG_0_5, 0, seg05up ? SERVO_180_A + 100 - OFFSET_UP_0_5 : SERVO_0_A);
  delay(DELAY_SEC);
}

// ---------------------------------------------------------------------------
void Set1Seg0124(uint8_t segnum, bool up) {
  if (segnum == SEG_1_0) {
    pwm0.setPWM(SEG_1_0, 0, up ? SERVO_180_A + 100 - OFFSET_UP_1_0 : SERVO_0_A);
  } else if (segnum == SEG_1_1) {
    pwm0.setPWM(SEG_1_1, 0, up ? SERVO_180_A + 100 - OFFSET_UP_1_1 : SERVO_0_A);
  } else if (segnum == SEG_1_2) {
    pwm0.setPWM(SEG_1_2, 0, up ? SERVO_180_R + 100 - OFFSET_UP_1_2 : SERVO_0_R);
  } else if (segnum == SEG_1_4) {
    pwm0.setPWM(SEG_1_4, 0, up ? SERVO_180_R + 100 - OFFSET_UP_1_4 : SERVO_0_R);
  }
  delay(DELAY_SEC);
}

void Set1Seg356(bool seg3, bool seg5, bool seg6) {
  if (seg16up != seg6) {
    // 只要6要动作，3和5都应该让一下
    pwm0.setPWM(SEG_1_3, 0, seg13up ? SERVO_135_R : SERVO_45_R);
    pwm0.setPWM(SEG_1_5, 0, seg15up ? SERVO_135_A : SERVO_45_A);
    delay(DELAY_SEC);
    seg16up = seg6;
  }
  // 6动作，或调试的时候，实时动一下
  pwm0.setPWM(SEG_1_6, 0, seg16up ? SERVO_180_A + 100 - OFFSET_UP_1_6 : SERVO_0_A);
  pwm0.setPWM(SEG_1_R, 0, seg16up ? SERVO_180_R + 100 - OFFSET_UP_1_6 : SERVO_0_R);
  // 可能6还没有动作完成，延时长一点
  delay(5 * DELAY_SEC);
  // 3和5恢复，或继续动作
  seg13up = seg3;
  seg15up = seg5;
  pwm0.setPWM(SEG_1_3, 0, seg13up ? SERVO_180_R + 100 - OFFSET_UP_1_3 : SERVO_0_R);
  pwm0.setPWM(SEG_1_5, 0, seg15up ? SERVO_180_A + 100 - OFFSET_UP_1_5 : SERVO_0_A);
  delay(DELAY_SEC);
}

// ---------------------------------------------------------------------------
void Set2Seg0124(uint8_t segnum, bool up) {
  if (segnum == SEG_2_0) {
    pwm1.setPWM(SEG_2_0, 0, up ? SERVO_180_A + 100 - OFFSET_UP_2_0 : SERVO_0_A);
  } else if (segnum == SEG_2_1) {
    pwm1.setPWM(SEG_2_1, 0, up ? SERVO_180_A + 100 - OFFSET_UP_2_1 : SERVO_0_A);
  } else if (segnum == SEG_2_2) {
    pwm1.setPWM(SEG_2_2, 0, up ? SERVO_180_R + 100 - OFFSET_UP_2_2 : SERVO_0_R);
  } else if (segnum == SEG_2_4) {
    pwm1.setPWM(SEG_2_4, 0, up ? SERVO_180_R + 100 - OFFSET_UP_2_4 : SERVO_0_R);
  }
  delay(DELAY_SEC);
}

void Set2Seg356(bool seg3, bool seg5, bool seg6) {
  if (seg26up != seg6) {
    // 只要6要动作，3和5都应该让一下
    pwm1.setPWM(SEG_2_3, 0, seg23up ? SERVO_135_R : SERVO_45_R);
    pwm1.setPWM(SEG_2_5, 0, seg25up ? SERVO_135_A : SERVO_45_A);
    delay(DELAY_SEC);
    seg26up = seg6;
  }
  // 6动作，或调试的时候，实时动一下
  pwm1.setPWM(SEG_2_6, 0, seg26up ? SERVO_180_A + 100 - OFFSET_UP_2_6 : SERVO_0_A);
  pwm1.setPWM(SEG_2_R, 0, seg26up ? SERVO_180_R + 100 - OFFSET_UP_2_6 : SERVO_0_R);
  // 可能6还没有动作完成，延时长一点
  delay(5 * DELAY_SEC);
  // 3和5恢复，或继续动作
  seg23up = seg3;
  seg25up = seg5;
  pwm1.setPWM(SEG_2_3, 0, seg23up ? SERVO_180_R + 100 - OFFSET_UP_2_3 : SERVO_0_R);
  pwm1.setPWM(SEG_2_5, 0, seg25up ? SERVO_180_A + 100 - OFFSET_UP_2_5 : SERVO_0_A);
  delay(DELAY_SEC);
}

// ---------------------------------------------------------------------------
void Set3Seg0124(uint8_t segnum, bool up) {
  if (segnum == SEG_3_0) {
    pwm1.setPWM(SEG_3_0, 0, up ? SERVO_180_A + 100 - OFFSET_UP_3_0 : SERVO_0_A);
  } else if (segnum == SEG_3_1) {
    pwm1.setPWM(SEG_3_1, 0, up ? SERVO_180_A + 100 - OFFSET_UP_3_1 : SERVO_0_A);
  } else if (segnum == SEG_3_2) {
    pwm1.setPWM(SEG_3_2, 0, up ? SERVO_180_R + 100 - OFFSET_UP_3_2 : SERVO_0_R);
  } else if (segnum == SEG_3_4) {
    pwm1.setPWM(SEG_3_4, 0, up ? SERVO_180_R + 100 - OFFSET_UP_3_4 : SERVO_0_R);
  }
  delay(DELAY_SEC);
}

void Set3Seg356(bool seg3, bool seg5, bool seg6) {
  if (seg36up != seg6) {
    // 只要6要动作，3和5都应该让一下
    pwm1.setPWM(SEG_3_3, 0, seg33up ? SERVO_135_R : SERVO_45_R);
    pwm1.setPWM(SEG_3_5, 0, seg35up ? SERVO_135_A : SERVO_45_A);
    delay(DELAY_SEC);
    seg36up = seg6;
  }
  // 6动作，或调试的时候，实时动一下
  pwm1.setPWM(SEG_3_6, 0, seg36up ? SERVO_180_A + 100 - OFFSET_UP_3_6 : SERVO_0_A);
  pwm1.setPWM(SEG_3_R, 0, seg36up ? SERVO_180_R + 100 - OFFSET_UP_3_6 : SERVO_0_R);
  // 可能6还没有动作完成，延时长一点
  delay(5 * DELAY_SEC);
  // 3和5恢复，或继续动作
  seg33up = seg3;
  seg35up = seg5;
  pwm1.setPWM(SEG_3_3, 0, seg33up ? SERVO_180_R + 100 - OFFSET_UP_3_3 : SERVO_0_R);
  pwm1.setPWM(SEG_3_5, 0, seg35up ? SERVO_180_A + 100 - OFFSET_UP_3_5 : SERVO_0_A);
  delay(DELAY_SEC);
}

// ============================================================================
void SetSegnum0() {
  if (set == 0) {
    Set0Seg0124(SEG_0_0, true);
    Set0Seg0124(SEG_0_1, true);
    Set0Seg0124(SEG_0_2, true);
    Set0Seg0124(SEG_0_4, true);
    Set0Seg356(true, true, false);
  } else if (set == 1) {
    Set1Seg0124(SEG_1_0, true);
    Set1Seg0124(SEG_1_1, true);
    Set1Seg0124(SEG_1_2, true);
    Set1Seg0124(SEG_1_4, true);
    Set1Seg356(true, true, false);
  } else if (set == 2) {
    Set2Seg0124(SEG_2_0, true);
    Set2Seg0124(SEG_2_1, true);
    Set2Seg0124(SEG_2_2, true);
    Set2Seg0124(SEG_2_4, true);
    Set2Seg356(true, true, false);
  } else if (set == 3) {
    Set3Seg0124(SEG_3_0, true);
    Set3Seg0124(SEG_3_1, true);
    Set3Seg0124(SEG_3_2, true);
    Set3Seg0124(SEG_3_4, true);
    Set3Seg356(true, true, false);
  }
  delay(5 * DELAY_SEC);
}

void SetSegnum1() {
  if (set == 0) {
    Set0Seg0124(SEG_0_0, false);
    Set0Seg0124(SEG_0_1, false);
    Set0Seg0124(SEG_0_2, true);
    Set0Seg0124(SEG_0_4, false);
    Set0Seg356(true, false, false);
  } else if (set == 1) {
    Set1Seg0124(SEG_1_0, false);
    Set1Seg0124(SEG_1_1, false);
    Set1Seg0124(SEG_1_2, true);
    Set1Seg0124(SEG_1_4, false);
    Set1Seg356(true, false, false);
  } else if (set == 2) {
    Set2Seg0124(SEG_2_0, false);
    Set2Seg0124(SEG_2_1, false);
    Set2Seg0124(SEG_2_2, true);
    Set2Seg0124(SEG_2_4, false);
    Set2Seg356(true, false, false);
  } else if (set == 3) {
    Set3Seg0124(SEG_3_0, false);
    Set3Seg0124(SEG_3_1, false);
    Set3Seg0124(SEG_3_2, true);
    Set3Seg0124(SEG_3_4, false);
    Set3Seg356(true, false, false);
  }
  delay(5 * DELAY_SEC);
}

void SetSegnum2() {
  if (set == 0) {
    Set0Seg0124(SEG_0_0, false);
    Set0Seg0124(SEG_0_1, true);
    Set0Seg0124(SEG_0_2, true);
    Set0Seg0124(SEG_0_4, true);
    Set0Seg356(false, true, true);
  } else if (set == 1) {
    Set1Seg0124(SEG_1_0, false);
    Set1Seg0124(SEG_1_1, true);
    Set1Seg0124(SEG_1_2, true);
    Set1Seg0124(SEG_1_4, true);
    Set1Seg356(false, true, true);
  } else if (set == 2) {
    Set2Seg0124(SEG_2_0, false);
    Set2Seg0124(SEG_2_1, true);
    Set2Seg0124(SEG_2_2, true);
    Set2Seg0124(SEG_2_4, true);
    Set2Seg356(false, true, true);
  } else if (set == 3) {
    Set3Seg0124(SEG_3_0, false);
    Set3Seg0124(SEG_3_1, true);
    Set3Seg0124(SEG_3_2, true);
    Set3Seg0124(SEG_3_4, true);
    Set3Seg356(false, true, true);
  }
  delay(5 * DELAY_SEC);
}

void SetSegnum3() {
  if (set == 0) {
    Set0Seg0124(SEG_0_0, false);
    Set0Seg0124(SEG_0_1, true);
    Set0Seg0124(SEG_0_2, true);
    Set0Seg0124(SEG_0_4, true);
    Set0Seg356(true, false, true);
  } else if (set == 1) {
    Set1Seg0124(SEG_1_0, false);
    Set1Seg0124(SEG_1_1, true);
    Set1Seg0124(SEG_1_2, true);
    Set1Seg0124(SEG_1_4, true);
    Set1Seg356(true, false, true);
  } else if (set == 2) {
    Set2Seg0124(SEG_2_0, false);
    Set2Seg0124(SEG_2_1, true);
    Set2Seg0124(SEG_2_2, true);
    Set2Seg0124(SEG_2_4, true);
    Set2Seg356(true, false, true);
  } else if (set == 3) {
    Set3Seg0124(SEG_3_0, false);
    Set3Seg0124(SEG_3_1, true);
    Set3Seg0124(SEG_3_2, true);
    Set3Seg0124(SEG_3_4, true);
    Set3Seg356(true, false, true);
  }
  delay(5 * DELAY_SEC);
}

void SetSegnum4() {
  if (set == 0) {
    Set0Seg0124(SEG_0_0, true);
    Set0Seg0124(SEG_0_1, false);
    Set0Seg0124(SEG_0_2, true);
    Set0Seg0124(SEG_0_4, false);
    Set0Seg356(true, false, true);
  } else if (set == 1) {
    Set1Seg0124(SEG_1_0, true);
    Set1Seg0124(SEG_1_1, false);
    Set1Seg0124(SEG_1_2, true);
    Set1Seg0124(SEG_1_4, false);
    Set1Seg356(true, false, true);
  } else if (set == 2) {
    Set2Seg0124(SEG_2_0, true);
    Set2Seg0124(SEG_2_1, false);
    Set2Seg0124(SEG_2_2, true);
    Set2Seg0124(SEG_2_4, false);
    Set2Seg356(true, false, true);
  } else if (set == 3) {
    Set3Seg0124(SEG_3_0, true);
    Set3Seg0124(SEG_3_1, false);
    Set3Seg0124(SEG_3_2, true);
    Set3Seg0124(SEG_3_4, false);
    Set3Seg356(true, false, true);
  }
  delay(5 * DELAY_SEC);
}

void SetSegnum5() {
  if (set == 0) {
    Set0Seg0124(SEG_0_0, true);
    Set0Seg0124(SEG_0_1, true);
    Set0Seg0124(SEG_0_2, false);
    Set0Seg0124(SEG_0_4, true);
    Set0Seg356(true, false, true);
  } else if (set == 1) {
    Set1Seg0124(SEG_1_0, true);
    Set1Seg0124(SEG_1_1, true);
    Set1Seg0124(SEG_1_2, false);
    Set1Seg0124(SEG_1_4, true);
    Set1Seg356(true, false, true);
  } else if (set == 2) {
    Set2Seg0124(SEG_2_0, true);
    Set2Seg0124(SEG_2_1, true);
    Set2Seg0124(SEG_2_2, false);
    Set2Seg0124(SEG_2_4, true);
    Set2Seg356(true, false, true);
  } else if (set == 3) {
    Set3Seg0124(SEG_3_0, true);
    Set3Seg0124(SEG_3_1, true);
    Set3Seg0124(SEG_3_2, false);
    Set3Seg0124(SEG_3_4, true);
    Set3Seg356(true, false, true);
  }
  delay(5 * DELAY_SEC);
}

void SetSegnum6() {
  if (set == 0) {
    Set0Seg0124(SEG_0_0, true);
    Set0Seg0124(SEG_0_1, true);
    Set0Seg0124(SEG_0_2, false);
    Set0Seg0124(SEG_0_4, true);
    Set0Seg356(true, true, true);
  } else if (set == 1) {
    Set1Seg0124(SEG_1_0, true);
    Set1Seg0124(SEG_1_1, true);
    Set1Seg0124(SEG_1_2, false);
    Set1Seg0124(SEG_1_4, true);
    Set1Seg356(true, true, true);
  } else if (set == 2) {
    Set2Seg0124(SEG_2_0, true);
    Set2Seg0124(SEG_2_1, true);
    Set2Seg0124(SEG_2_2, false);
    Set2Seg0124(SEG_2_4, true);
    Set2Seg356(true, true, true);
  } else if (set == 3) {
    Set3Seg0124(SEG_3_0, true);
    Set3Seg0124(SEG_3_1, true);
    Set3Seg0124(SEG_3_2, false);
    Set3Seg0124(SEG_3_4, true);
    Set3Seg356(true, true, true);
  }
  delay(5 * DELAY_SEC);
}

void SetSegnum7() {
  if (set == 0) {
    Set0Seg0124(SEG_0_0, false);
    Set0Seg0124(SEG_0_1, true);
    Set0Seg0124(SEG_0_2, true);
    Set0Seg0124(SEG_0_4, false);
    Set0Seg356(true, false, false);
  } else if (set == 1) {
    Set1Seg0124(SEG_1_0, false);
    Set1Seg0124(SEG_1_1, true);
    Set1Seg0124(SEG_1_2, true);
    Set1Seg0124(SEG_1_4, false);
    Set1Seg356(true, false, false);
  } else if (set == 2) {
    Set2Seg0124(SEG_2_0, false);
    Set2Seg0124(SEG_2_1, true);
    Set2Seg0124(SEG_2_2, true);
    Set2Seg0124(SEG_2_4, false);
    Set2Seg356(true, false, false);
  } else if (set == 3) {
    Set3Seg0124(SEG_3_0, false);
    Set3Seg0124(SEG_3_1, true);
    Set3Seg0124(SEG_3_2, true);
    Set3Seg0124(SEG_3_4, false);
    Set3Seg356(true, false, false);
  }
  delay(5 * DELAY_SEC);
}

void SetSegnum8() {
  if (set == 0) {
    Set0Seg0124(SEG_0_0, true);
    Set0Seg0124(SEG_0_1, true);
    Set0Seg0124(SEG_0_2, true);
    Set0Seg0124(SEG_0_4, true);
    Set0Seg356(true, true, true);
  } else if (set == 1) {
    Set1Seg0124(SEG_1_0, true);
    Set1Seg0124(SEG_1_1, true);
    Set1Seg0124(SEG_1_2, true);
    Set1Seg0124(SEG_1_4, true);
    Set1Seg356(true, true, true);
  } else if (set == 2) {
    Set2Seg0124(SEG_2_0, true);
    Set2Seg0124(SEG_2_1, true);
    Set2Seg0124(SEG_2_2, true);
    Set2Seg0124(SEG_2_4, true);
    Set2Seg356(true, true, true);
  } else if (set == 3) {
    Set3Seg0124(SEG_3_0, true);
    Set3Seg0124(SEG_3_1, true);
    Set3Seg0124(SEG_3_2, true);
    Set3Seg0124(SEG_3_4, true);
    Set3Seg356(true, true, true);
  }
  delay(5 * DELAY_SEC);
}

void SetSegnum9() {
  if (set == 0) {
    Set0Seg0124(SEG_0_0, true);
    Set0Seg0124(SEG_0_1, true);
    Set0Seg0124(SEG_0_2, true);
    Set0Seg0124(SEG_0_4, true);
    Set0Seg356(true, false, true);
  } else if (set == 1) {
    Set1Seg0124(SEG_1_0, true);
    Set1Seg0124(SEG_1_1, true);
    Set1Seg0124(SEG_1_2, true);
    Set1Seg0124(SEG_1_4, true);
    Set1Seg356(true, false, true);
  } else if (set == 2) {
    Set2Seg0124(SEG_2_0, true);
    Set2Seg0124(SEG_2_1, true);
    Set2Seg0124(SEG_2_2, true);
    Set2Seg0124(SEG_2_4, true);
    Set2Seg356(true, false, true);
  } else if (set == 3) {
    Set3Seg0124(SEG_3_0, true);
    Set3Seg0124(SEG_3_1, true);
    Set3Seg0124(SEG_3_2, true);
    Set3Seg0124(SEG_3_4, true);
    Set3Seg356(true, false, true);
  }
  delay(5 * DELAY_SEC);
}

#endif